• Ubuntu 18.04を Ryzenで使用時に定期的にフリーズする。
    Ubuntu 18.04を Ryzenで使用時に定期的にフリーズする。
    No Comments on Ubuntu 18.04を Ryzenで使用時に定期的にフリーズする。

    本格的にUbuntu 18.04に乗り換えて、1ヶ月ほど経つが、Ryzen CPUのマシンだけ、多いときに一日数回ハングアップしてしまう現象に襲われていた。どうもこれ、Ryzen CPUの C6 State というのが絡んでいるバグらしい。 CPUのせいなのか、Linux Kernelが悪いのかわからないが、とりあえず対応策を見つけたので施してみた。 これでしばらく様子を見てみる。 ■追記 この設定をしてから一週間ほど経つが、これまで一日数回ハングアップしていたマシンが 一週間で一度もハングアップしなくなりました! amd-disable-c6 万歳!! msrモジュールをOS起動時にロードする [bash] $ sudo nano /etc/modules-load.d/modules.conf msr とだけ追記。 [/bash] C6 Stateを disableにするサービス導入 [bash] $ wget -nv -O – https://download.opensuse.org/repositories/home:jkist/xUbuntu_18.04/Release.key | sudo apt-key add – $ sudo sh -c “echo ‘deb http://download.opensuse.org/repositories/home:/jkist/xUbuntu_18.04/ /’ > /etc/apt/sources.list.d/home:jkist.list” $ sudo apt-get update $ sudo apt-get install amd-disable-c6 [/bash]

    Read more
  • Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.5
    Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.5
    No Comments on Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.5

    前回に引き続き 前回までで、データ一覧を表示するところはできました。 今回は最終仕上げ、一覧から編集ボタンを押し、データの編集画面に移動し、データの修正・削除。 一覧から、新規データ作成ボタンを押し、データの新規作成。 細かく説明すると非常に時間がかかるので、ソースコードを貼り付けるのをメインにします。 この記事は5回に分けて連載する、第5回の記事です。 ・第1回 Apollo Serverが動くところまで ・第2回 Apollo Server配下で、GraphQLを使って商品マスターにアクセスする ・第3回 フロントエンドをReact+Redux+graphql-requestを使って実装する ・第4回 フロントエンドからgraphql-requestを使って、データを取得・表示する ・第5回 graphql-requestを使って、データを登録・修正・削除する(この記事) ファイルツリー 今回も完成形のファイルツリーをまず示しておきます。 一覧画面の編集 変更箇所は「新規データ作成」ボタンを追加したところと、Reactが警告を出していたので、 明細業のデータに key を付与したところでしょうか。 [bash] $ nano components/product.js [/bash] [bash] import React from “react”; import {withRouter} from “react-router-dom”; import Menu from “./menu”; class Product extends React.Component { componentDidMount() { this.props.onInit(); } render(){ let {list_body, has_more, onClickEdit, onAddNew} = this.props; let lstBody = []; for (let i = 0 ; i < list_body.length ; i++){ let bd = list_body[i]; lstBody.push( {bd.id} {bd.product_name} {bd.price} onClickEdit(bd.id, this.props.history)}>編集 ); } return ( This is Product onAddNew(this.props.history)}>新規データ作成 {lstBody} ) } } export default withRouter(Product); [/bash] 一覧画面に対応するコンテナの編集 onClickEdit,onAddNew でページ遷移させるところが主な変更点。 [bash] $ nano containers/cproduct.js [/bash] [bash] import {connect} from “react-redux”; import {GraphQLClient} from “graphql-request”; import Product from “../components/product”; import {set_list_body, set_has_more} from “../actions/product”; const GET_PRODUCTS = ` query GetProducts ($offset: Int!, $limit: Int!){ getProducts(offset: $offset, limit: $limit){ has_more products { id product_name price } } } `; const HOST_ADDR = “http://localhost:4000”; let LIST_OFFSET = 0; let LIST_LIMIT = 100; const mapStateToProps = (state) => { return { list_body: state.product.list_body, has_more: state.product.has_more, } } const mapDispatchToProps = (dispatch) => { return { onInit: () => { LIST_OFFSET = 0; onLoadData(LIST_OFFSET, [], dispatch) }, onClickEdit: (id, history) => { history.push(“/product/edit/” + id); }, onAddNew: (history) => { history.push(“/product/add/none”); }, onLoadMore: (list_body) => { onLoadData(LIST_OFFSET, list_body, dispatch); }, } } const onLoadData = (offset, list_body, dispatch) => { const client = createClient(); let variables = {offset: offset , limit: LIST_LIMIT}; client.request(GET_PRODUCTS, variables).then(data => { let newList = list_body; for (let i=0; i < data.getProducts.products.length; i++){ newList = newList.concat(data.getProducts.products[i]); } dispatch(set_list_body(newList)); LIST_OFFSET += LIST_LIMIT; dispatch(set_has_more(data.getProducts.has_more)); }) } const createClient =() => { const client = new GraphQLClient(HOST_ADDR + “/graphql”, { headers: { “x-token”: “test-test”, }, }); return client; } const CProduct = connect(mapStateToProps, mapDispatchToProps)(Product) export default CProduct [/bash] データ編集画面 一覧画面から…

    Read more
  • Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.4
    Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.4
    No Comments on Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.4

    前回に続いて さて、ここからが本番です。本来ならば Apollo Clientを使うべきなのかもしれませんが、 私の個人的な見解では Apollo Client は相当使いづらいです。 なので、 graphql-request というパッケージを使って、 GraphQLの QueryとMutaionを行います。 サーバーサイドは GraphQLのリクエストさえ飛んでくれば処理できるのでそれで問題なしです! 私はこのやり方が非常に気に入っています。 この記事は5回に分けて連載する、第4回の記事です。 ・第1回 Apollo Serverが動くところまで ・第2回 Apollo Server配下で、GraphQLを使って商品マスターにアクセスする ・第3回 フロントエンドをReact+Redux+graphql-requestを使って実装する ・第4回 フロントエンドからgraphql-requestを使って、データを取得・表示する(この記事) ・第5回 graphql-requestを使って、データを登録・修正・削除する GraphQLアクセスの中心となるcontainerファイルを作成 GET_PRODUCTSで、データをN件取得します。 実際には onLoadData 関数内で GET_PRODUCTSクエリで、GraphQL リクエストを行い、データをN件取得します。 Reduxの containerについてよくわからない場合は、みっちり予習してください。 [bash] $ nano containers/cproduct.js [/bash] [bash] import {connect} from “react-redux”; import {GraphQLClient} from “graphql-request”; import Product from “../components/product”; import {set_list_body, set_has_more} from “../actions/product”; const GET_PRODUCTS = ` query GetProducts ($offset: Int!, $limit: Int!){ getProducts(offset: $offset, limit: $limit){ has_more products { id product_name price } } } `; const HOST_ADDR = “http://localhost:4000”; let LIST_OFFSET = 0; let LIST_LIMIT = 100; const mapStateToProps = (state) => { return { list_body: state.product.list_body, has_more: state.product.has_more, } } const mapDispatchToProps = (dispatch) => { return { onInit: () => { LIST_OFFSET = 0; onLoadData(LIST_OFFSET, [], dispatch) }, onAddNew: (history) => { history.push(“/product/add/none”) }, onLoadMore: (list_body) => { onLoadData(LIST_OFFSET, list_body, dispatch) }, } } const onLoadData = (offset, list_body, dispatch) => { const client = createClient(); let variables = {offset: offset , limit: LIST_LIMIT}; client.request(GET_PRODUCTS, variables).then(data => { let newList = list_body; for (let i=0; i < data.getProducts.products.length; i++){ newList = newList.concat(data.getProducts.products[i]); } dispatch(set_list_body(newList)); LIST_OFFSET += LIST_LIMIT; dispatch(set_has_more(data.getProducts.has_more)); }) } const createClient =() => { const client = new GraphQLClient(HOST_ADDR + “/graphql”, { headers: { “x-token”: “test-test”, }, }); return client; } const CProduct = connect(mapStateToProps, mapDispatchToProps)(Product) export default CProduct [/bash] ページ表示時にデータをロードできるようにする ページを構成する product.jsファイルを編集し、componentDidMountから、 containerの onInitメソッドを呼び出すようにします。 [bash] $ nano components/product.js [/bash] componentDidMount を追記します。 [bash] import React from “react”; import Menu from “./menu”; class Product extends React.Component { componentDidMount() { this.props.onInit(); } render(){ return ( This is Product ) } } export default Product; [/bash] App.jsの調整 コンテナファイルを作成しましたが、作成しただけでは利用されないので、 product.jsの代わりに、cproduct.jsを利用するように書き換えます。 [bash] $nano App.js [/bash] components/product.js ではなく、 コンテナ側の containers/cproduct.js を参照します。 [bash] import React from ‘react’; import {Router, Route} from “react-router-dom”; import history from ‘./history’; import Home from “./components/home”; import About from “./components/about”; import…

    Read more
  • Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.3
    Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.3
    No Comments on Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.3

    前回に続いて 前回までの記事でApolloServer配下でGraphQLが動作し、GraphQL APIというか、GraphQL クエリ言語で、商品テーブルのデータ登録、読み込みができるようになったので、今回はフロントエンドをReact+Reduxで組み始めるところを説明します。Reactはそれほどでもないのですが、Reduxのことをわかっていないとナンノコッチャよく分からんということになると思いますので、各自Reduxの予習はみっちりしてください。 この記事は5回に分けて連載する、第3回の記事です。 ・第1回 Apollo Serverが動くところまで ・第2回 Apollo Server配下で、GraphQLを使って商品マスターにアクセスする ・第3回 フロントエンドをReact+Redux+graphql-requestを使って実装する(この記事) ・第4回 フロントエンドからgraphql-requestを使って、データを取得・表示する ・第5回 graphql-requestを使って、データを登録・修正・削除する 完成形のファイルツリー 説明が下手で、どこのファイルをいじっているのかわかりにくくなると思うので、完成形のファイルツリーを表示しておきます。 フロントエンドプロジェクトの作成 create-react-app を使って、プロジェクトを作ります。 [bash] $ cd ~/workspace/graphql-master $ sudo npm install -g create-react-app $ create-react-app front [/bash] npm を使って必要なモジュールインストール [bash] $ cd front $ npm start $ npm install –save react-router-dom redux react-redux graphql-request [/bash] Reduxに必要なフォルダ構成を作成 [bash] $ mkdir src/actions $ mkdir src/components $ mkdir src/constants $ mkdir src/containers $ mkdir src/reducers $ mkdir src/sass [/bash] アプリケーションファイル App.jsを再定義 自動生成されたApp.jsを以下のように、ごっそり書き換えてください。 ルーティングにはreact-router-domを使い、 Home/About/Product(商品マスタ) の3画面構成にします。 [bash] $ nano App.js [/bash] [bash] import React from ‘react’; import {Router, Route} from “react-router-dom”; import history from ‘./history’; import Home from “./components/home”; import About from “./components/about”; import Product from “./components/product”; function App() { return ( GraphQL と Apollo Serverを使ったマスターメンテナンス ); } export default App; [/bash] App.jsに記述した諸々を定義 react-routerのヒストリーを管理するファイルです。 [bash] $ nano history.js [/bash] [bash] import { createBrowserHistory as createHistory } from ‘history’ export default createHistory() [/bash] 3画面共通のメニュー定義です。 [bash] $ nano components/menu.js [/bash] [bash] import React from “react” import {Link} from “react-router-dom”; class Menu extends React.Component { render() { return ( Home About Product ) } } export default Menu; [/bash] ホーム画面 [bash] $ nano componetns/home.js [/bash] [bash] import React from “react”; import Menu from “./menu”; class Home extends React.Component { render(){ return ( This is Home ) } } export default Home; [/bash] About画面 [bash] $ nano componetns/about.js [/bash] [bash] import React from “react”; import Menu from “./menu”; class About extends React.Component { render(){ return ( This is About ) } } export default About; [/bash] Product画面(商品マスターのメイン画面) [bash] $ nano componetns/product.js [/bash] [bash] import React from “react”; import Menu from “./menu”; class Product extends React.Component { render(){ return ( This is Product ) } } export default Product; [/bash] ここまでを動作確認 こんな感じに表示されれば、成功です。 Reduxのreducerを定義 ここからは reduxの基礎知識がある前提で書き進めます。 ツライと思いますが、写経してください。 [bash] $ nano reducers/root.js [/bash] [bash] import {combineReducers} from “redux”; import product from “./Product/product”; const…

    Read more
  • Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.2
    No Comments on Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.2

    前回に続いて とりあえず、GraphQLを利用できる Apollo Serverが起動できたので、 GraphQLを使って、商品テーブル(products)にアクセスできるようにしてみましょう。 この記事は5回に分けて連載する、第2回の記事です。 ・第1回 Apollo Serverが動くところまで ・第2回 Apollo Server配下で、GraphQLを使って商品マスターにアクセスする(この記事) ・第3回 フロントエンドをReact+Redux+graphql-requestを使って実装する ・第4回 フロントエンドからgraphql-requestを使って、データを取得・表示する ・第5回 graphql-requestを使って、データを登録・修正・削除する 完成ファイルツリー 説明がわかりにくいと思うので、完成形のファイルツリーを示しておきます。 テーブル定義(スキーマ作成) [bash] $ mkdir datasources [/bash] 商品テーブルの構造は id/商品名/金額 だけのシンプルなものにします。 [bash] $ nano datasources/create_table.sql [/bash] [bash] create table products ( id SERIAL, product_name TEXT, price INTEGER, “createdAt” timestamp with time zone, “updatedAt” timestamp with time zone, primary key (id)); [/bash] モデル定義 商品テーブルの CRUDをデータソース(モデル)に定義します。 データベースのアクセスには sequelizeを使いますので、その使い方は、各自学んでくださいね。 (この程度だと、ソースを見たままシンプルなものですが・・・) [bash] $ nano datasources/product.js [/bash] [bash] import SQL from “sequelize”; import {DataSource } from “apollo-datasource”; class ProductAPI extends DataSource { constructor( {store} ) { super(); this.store = store; } initialize(config) { this.context = config.context; } async add({product_name, price}) { return await this.store.products.create({product_name: product_name, price: price}); } async findOne({id}) { return await this.store.products.findByPk(id); } async remove({id}) { const rec = await this.store.products.findByPk(id); const ret = await rec.destroy(); return {id:0, product_name: “”, price: 0}; } async edit({id, product_name, price}){ const rec = await this.store.products.findByPk(id); rec.product_name = product_name; rec.price = price; return await rec.save(); } } export default ProductAPI; [/bash] index.jsの調整 作成したモデルを使えるように、以下の1行を追記します。 [bash] $ nano index.js [/bash] [bash] const store = createStore(); import ProductAPI from “./datasources/product”; { let rec ; if (mode === “ADD”){ rec = await dataSources.productAPI.add({product_name, price}); } else if (mode === “EDIT”){ rec = await dataSources.productAPI.edit({id, product_name, price}); } else { rec = await dataSources.productAPI.remove({id}); } return rec; }, } } [/bash] 実DB に create table いざ、レコードを追加する前に Postgresqlに(mysqlでもなんでもいいですが・・・) products テーブルを create table してください。 [bash] create table products ( id SERIAL, product_name TEXT, price INTEGER, “createdAt” timestamp with time zone, “updatedAt” timestamp with time zone, primary key (id)); [/bash] Apollo の Playgroundを使って、データを登録してみよう! では、実際に先程作った schema.jsとresolver.jsと product.js(モデル)を 使って データを登録してみましょう! 登録するデータは 商品名 価格 ———————————- iPhone X Silver 87000 Garaxy S10 72000 Fujitsu らくらくホン 59000 ブラウザーを起動し、http://localhost:4000 としてください。 (その前に npm start も忘れずに) こんな画面が出ればOKです。 左側に、 GraphQL言語でクエリを記述して、真ん中の三角ボタンで実行すると、結果が右側に表示されます。 商品データの登録 以下の3つのクエリ(mutation)を実行しデータを登録してみましょう。 [bash] mutation RegisterProduct { registerProduct(mode: “ADD”, id:0, product_name: “iPhone X Silver”, price: 87000){ id } } [/bash] [bash]…

    Read more
  • Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.1
    Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.1
    No Comments on Apollo Server、GraphQL、nodejs、sequesize、フロントにReact+Reduxで マスターメンテナンスを作ろう! 〜Vol.1

    はじめに GraphQL使ってみたいなぁ。調べたところ、GraphQLをサーバーサイドで実装しているのはRubyとnodejs。検索結果の量で比べるとnodejsの方が多い。とくにApollo を使った記事が多い。 ということで、サーバーサイドはApolloでGraphQLを実装し、フロントもApollo Clientで、と行きたいところなのですが、私が調べて実際使ってみたところ、Apollo Client+Reactは色々制約があって使いづらい。もう少し突っ込んで調べたところ、GraphQLサーバーに QueryとMutaionのリクエストを行える、graphql-requestという npmパッケージがあるのを見つけた。これを実際使ってみると、結構なレベルで思い通りにプログラミングできるようになったので、以下の組み合わせでGraphQLの練習として、商品マスターメンテナンスを組んでみたいと思う。 サーバーサイド Apollo Server + GraphQL + nodejs + sequelize フロントエンド React + Redux + graphql-request RESTと何かと比較され、RESTの次世代のGraphQLだと言われますが、実際にその正体を突き止められることを目指しています。私も、最初コーディングしてるときは、ちんぷんかんぷんでしたが、わかりだすとするすると理解が進みますし、GraphQLの良さも体感できます。 かなり長いですが、我慢してお付き合いください。 結構なボリュームなので、4回か5回に分けての連載になります。 ・第1回 Apollo Serverが動くところまで(この記事) ・第2回 Apollo Server配下で、GraphQLを使って商品マスターにアクセスする ・第3回 フロントエンドをReact+Redux+graphql-requestを使って実装する ・第4回 フロントエンドからgraphql-requestを使って、データを取得・表示する ・第5回 graphql-requestを使って、データを登録・修正・削除する まず、第一回はサーバーサイドのプロジェクトを作り、必要なnpm パッケージを導入し、 npm startで Apollo Serverが動くところまで。 ファイルの構成がわかりにくいと思うので、完成形のフォルダ構成を示しておきます。 サーバーサイドの準備 まずは開発フォルダを作成します。 [bash] $ mkdir ~/workspace $ mkdir ~/workspace/graphql-master $ mkdir ~/workspace/graphql-master/server $ cd ~/workspace/graphql-master/server [/bash] npmを使って、必要なパッケージ群をインストール [bash] $ npm init -y $ npm install –save apollo-datasource apollo-server dotenv graphql nodemon pg sequelize $ npm install –save-dev apollo apollo-link apollo-link-http babel-cli babel-plugin-transform-object-rest-spread babel-preset-env jest nock node-fetch [/bash] Apollo Serverを起動させるために サーバーサイドの中心となるファイル index.jsにApollo Serverを起動するための、あれこれを記述していきます。 以下、コンソールで、コマンドを記述してあるのは、基本、 プロジェクトルート/src ディレクトリをベースに記載します。 [bash] $ mkdir src $ cd src $ nano index.js [/bash] index.js (src/index.js) いろんなファイルをインクルードしていきます。これらのファイルはApollo ServerでGraphQLを動かすのに、必須なファイル群です。最初は意味がわからなくても、あぁ、こんなファイルがいるんだなと、感覚的に覚えるようにしてください。 schema というのは、GraphQL APIの定義を書く場所です。 resolvers というのは、schema に記述したAPIの実装を書く場所です。 store というのは mysqlやpostgresql のデータストアの定義を書く場所です。 dataSources というのは、データベースの各テーブルに対するモデルをまとめるためのものです。 最後に server.listenで、nodejs サーバー(Apollo Server)を起動しています。 [bash] import {ApolloServer} from “apollo-server”; import typeDefs from “./schema”; import resolvers from “./resolvers”; import { createStore } from “./store”; const path = require(‘path’); require(‘dotenv’).config({ path: path.join(__dirname, ‘../.env’) }); const store = createStore(); const dataSources = () => ({ productAPI: new ProductAPI({store}), }); const server = new ApolloServer({ typeDefs, resolvers, }, context: async({req}) => { return { SECRET: process.env.SECRET, } }, dataSources, }); server.listen().then(({ url }) => { console.log(`GraphQL マスターメンテナンス Server ready at ${url}`); }); [/bash] .env(.env) 環境設定ファイルに、データベースへの接続設定とシークレットキーを定義します。 [bash] $ nano ../.env [/bash] [bash] DATABASE=graphql_dev DATABASE_USER=postgres DATABASE_PASSWORD=mypass SECRET=xz5y78fwfwefwekwfhyu.1856547.ffgxmz [/bash] このファイルはお決まりの魔法の言葉だ程度で覚えておいて、とりあえず、作ってください。 [bash] $ nano ../.babelrc [/bash] [bash] { “presets”: [ [ “env”, { “targets”: { “node”: “current” } } ] ], “plugins”: [“transform-object-rest-spread”] } [/bash] schema.js (src/schema.js) では GraphQL APIの定義を書いていく schema.jsです。 [bash] $ nano schema.js [/bash] とりあえず、Query と Mutationは 適当なものでごまかしておきます。(あとで修正します) [bash] import { gql } from “apollo-server”; export default gql` type Query { getProduct(id: Int!): Int! } type Mutation{ registerProduct(id: Int!): Int! } `; [/bash] resolvers.js (src/resolvers.js) では GraphQL APIの実装を書いていく resolvers.jsです。 とりあえず、空っぽの Query と Mutationを定義しておきましょう。 [bash] $ nano resolver.js [/bash] [bash] import…

    Read more
  • create-react-app で作った環境で、production/staging/xxxなどを process.envを使って切り替える
    create-react-app で作った環境で、production/staging/xxxなどを process.envを使って切り替える
    No Comments on create-react-app で作った環境で、production/staging/xxxなどを process.envを使って切り替える

    create-react-appした環境では、start/build/test の環境はできて、ビルドするときに 必要な環境変数が process.env.NODE_ENV にセットされますが・・・ production環境のとき、stagingのとき と切り替えたいときに、 process.env.NODE_ENVではうまく行きません。 create-react-appした環境では、 「REACT_APP_xxxxxxx」 という環境変数を使うことができます! なので、環境変数に REACT_APP_CURR_ENV という変数を用意します。 で、環境毎に違う設定などは、ごく僅かだと思うので、私の場合こんなjavascriptを作って対応してます。 [bash] let const_HOST_ADDR; let const_WS_HOST_ADDR; if (process.env.REACT_APP_CURR_ENV === “production” ){ const_HOST_ADDR = “https://myapp.jp”; const_WS_HOST_ADDR = “ws://myapp.jp”; } else if (process.env.REACT_APP_CURR_ENV === “staging” ){ const_HOST_ADDR = “https://stg.myapp.jp”; const_WS_HOST_ADDR = “ws://stg.myapp.jp”; } else { const_HOST_ADDR = “http://localhost:4000”; const_WS_HOST_ADDR = “ws://localhost:4000”; } export const HOST_ADDR = const_HOST_ADDR; export const WS_HOST_ADDR = const_WS_HOST_ADDR; [/bash] package.jsonを以下のように編集します。 [bash] { “name”: “front”, “version”: “1.0.0”, “description”: “”, “main”: “index.js”, “scripts”: { “start”: “react-scripts start”, “build”: “REACT_APP_CURR_ENV=production react-scripts build”, “staging”: “REACT_APP_CURR_ENV=staging react-scripts build”, “test”: “react-scripts test”, “eject”: “react-scripts eject” },    ・    ・    以下略    ・    ・ [/bash] production環境のビルドを行いたいときは [bash] $ npm run build [/bash] staging環境のビルドを行いたいときは [bash] $ npm run staging [/bash] これで、めでたし、めでたし。

    Read more
  • 安物USB Bluetoothドングルは相性がある 〜 Ubuntu編
    安物USB Bluetoothドングルは相性がある 〜 Ubuntu編
    No Comments on 安物USB Bluetoothドングルは相性がある 〜 Ubuntu編

    Bluetooth機器、今頃になって使うようになったんだが・・・ BT マウスとはご機嫌に繋がっていた、 ELECOM LBT-UAN05C2 https://www.elecom.co.jp/products/LBT-UAN05C2.html これだったと思うのだが、CSR製のチップを積んでいる。 CSR8510 A10 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) こいつと JBL GO 2 というスピーカーとのコネクションがめちゃくちゃ不安定。 OS側のドライバーの問題かなと思って、bluetooth周りのモジュールあれこれ入れ替えて 苦労したが、結果は変わらず・・・ 外部デバイス自身が存在することは認識するが、ペアリングが数十回に1回ぐらいしか ヒットしない(笑) Ubuntu18.04が悪いのかと思って、あれこれいじくり回したらOSが不安定になって 再インストールまでしましたよ(笑) iPhoneやAndroidスマホからは簡単に繋がるのよね。 きっとドライバー周りに違いないと思ってたんだが、同じUbuntu18.04をインストールしてある ノートPC。こいつは、きっとまともなブランドのBluetoothチップが載ってるんだと思うが あっさりとスピーカーとのコネクトに成功する。 つまりは CSRの安物ドングルとの相性が悪いということみたい。 これに気づくまでに3時間以上費やした・・・ 同じ安物でもBroadcomのチップが載ってるらしい USB-BT40LE https://www.amazon.co.jp/gp/product/B00COU5RP2 こいつを注文してみた。 さてはて、安物買いの銭失いは続くのか・・・

    Read more
  • Ubuntu 16.04 で WN-AC433UM/GWー450S を認識させる
    Ubuntu 16.04 で WN-AC433UM/GWー450S を認識させる
    1 Comment on Ubuntu 16.04 で WN-AC433UM/GWー450S を認識させる

    はじめに I-O Dataの 433Mbps 対応のUSB無線LAN WN-AC433UM(W) を購入した。 Ubuntu(Linux Mint)で使うつもりである。もちろんデフォルトでは無線LANを認識しないことは 承知の上での購入。 Ubuntu16.04 系でこの無線LANを433Mbpsの無線LANとして認識させちゃいましょうの巻。 PlanexのGW-450Sも同じ realtek 8821au or 8812auらしいので、同じ手順で行けると思います。 【追記】 2019年4月現在、過去に提示していた方法では、Wifiアダプタ自体を認識しなくなるケースが多かった。 以下の方法で、2019年4月 Ubuntu 16.04.6 でWifiが苦労の末認識されたので、情報共有します! デバイスのIDを調べる まずは、USB無線LANをPCに挿して、デバイスのIDを調べる。 lsusb コマンドを叩いて、 I-O Data の行を見つける。 今回であれば、 04bb:0959 がその番号。 [bash] $ lsusb Bus 002 Device 005: ID 046d:c52b Logitech, Inc. Unifying Receiver Bus 002 Device 004: ID 05e3:0608 Genesys Logic, Inc. Hub Bus 002 Device 003: ID 04bb:0959 I-O Data Device, Inc. Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub [/bash] コンパイル環境を整える [bash] $ sudo apt-get install build-essential gcc git dkms $ sudo apt-get install linux-headers-`uname -r` [/bash] ソースコード取得 [bash] $ cd /usr/local/src $ sudo wget https://github.com/abperiasamy/rtl8812AU_8821AU_linux/archive/master.zip $ sudo unzip master.zip [/bash] 追加するUSBのデバイスIDをソースに追加する 一番最初に調べたデバイスID 04bb:0959 をソースに追加します。 [bash] $ cd rtl8812AU_8821AU_linux-master $ sudo nano os_dep/linux/usb_intf.c [/bash] I-O Dataの似た型番の下に 調べた番号を追記する(最終行) [bash] {USB_DEVICE(0x0411, 0x0242),.driver_info = RTL8821}, /* BUFFALO – Edimax */ {USB_DEVICE(0x056E, 0x4007),.driver_info = RTL8821}, /* ELECOM – WDC-433DU2H */ {USB_DEVICE(0x04BB, 0x0953),.driver_info = RTL8821}, /* I-O DATA – WN-AC433UA */ {USB_DEVICE(0x04BB, 0x0959),.driver_info = RTL8821}, /* I-O DATA – WN-AC433UM */ [/bash] コンパイル & 動作検証 [bash] $ sudo make $ sudo make install $ sudo modprobe rtl8812au $ sudo systemctl restart network-manager [/bash] USB無線LANを刺して、反応すればOK。(ifconfig / iwconfigなどで確認) 動作確認 USB無線LANを指し、画面右上のネットワーク設定のところを開いて アクセスポイントが見えてたら、めでたしめでたし。 iwconfig の結果、5Ghz(11ac)でつながっていることがわかります。 [bash] $ iwconfig enx3476c553eb0f IEEE 802.11AC ESSID:”Buffalo-A-1A78″ Nickname:”” Mode:Managed Frequency:5.18 GHz Access Point: 88:57:EE:3E:8A:7C Bit Rate:390 Mb/s Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality=98/100 Signal level=68/100 Noise level=0/100 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 [/bash] 念の為、以下もいじる必要があるかもしれません。 [bash] sudo nano /etc/NetworkManager/NetworkManager.conf 末尾に追加 [device] wifi.scan-rand-mac-address=0 [/bash]

    Read more
  • Laravel と Reactで Laravel Mixを使いapp.cssとapp.jsのバージョン管理を有効にする
    Laravel と Reactで Laravel Mixを使いapp.cssとapp.jsのバージョン管理を有効にする
    No Comments on Laravel と Reactで Laravel Mixを使いapp.cssとapp.jsのバージョン管理を有効にする

    LaravelとReactを使って、サービスを作ったはいいが、いざリリースして、フロント周りの調整をかけても、なかなかクライアントサイドで変更が有効にされないケースが多かった。 これは当たり前の話で、Laravel内から コンパイル済みのapp.cssとapp.jsをくださいとロジックを書いているからである。 これ、バージョンを上げるごとに手動で、ファイル名を変更したり、パラメーターを追加して、強制的に再読込させる方法もないではないが、スマートではない。 そこでどうするか。 プロジェクトのルートにある Laravel Mixのファイルに以下を追記(末尾3行) webpack.mix.jsを編集 webpack.mix.js [bash] mix.react(‘resources/assets/js/app.js’, ‘public/js’) .sass(‘resources/assets/sass/app.scss’, ‘public/css’) .sourceMaps(); + if (mix.inProduction()) { + mix.version(); + } [/bash] ルートになるbladeファイル編集 Reactのルートとなるbladeファイルを調整する。 app.cssの行と、app.jsの行を以下のようにする。 [bash] – + – + [/bash] 動作検証 リリース作業をしてみて、Chromeで読み込んでみて、app.jsが以下のようになっていれば、成功!

    Read more

Back to Top